/*
 * 文 件 名:  JpaQueryService.java
 * 版    权:  Ysten Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved
 * 描    述:  <描述>
 * 修 改 人:  bo.chen
 * 修改时间:  2014年11月10日
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package lv.pig.base.jpa.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
 * <一句话功能简述> JPAsql查询 <功能详细描述>
 * 
 * @author bo.chen
 * @version [版本号, 2014年11月10日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public interface JpaQueryService<T>
{
    /**
     * <一句话功能简述>HSQL查询列表 <功能详细描述>
     * 
     * @param sql
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    List<T> findListBySql(String sql, Object... args);
    
    /**
     * <一句话功能简述>HSQL查询对象 <功能详细描述>
     * 
     * @param sql
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    T findBySql(String sql, Object... args);
    
    /**
     * <一句话功能简述>原生sql查询列表 <功能详细描述>
     * 
     * @param sql
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    List<T> findListByNativeSql(String sql, Class<?> c, Object... args);
    
    /**
     * <原生sql查询全部,需要自己加limit> <功能详细描述>
     * 
     * @param sql
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    List<T> findListByNativeSql(String sql, Object... args);
    
    /**
     * <一句话功能简述>原生sql查询对象 <功能详细描述>
     * 
     * @param sql
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    T findByNativeSql(String sql, Class<?> c, Object... args);
    
    /**
     * <原生sql查询对象 Object[]> <功能详细描述>
     * 
     * @param sql
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    T findByNativeSql(String sql, Object... args);
    
    /**
     * <一句话功能简述>HSQL分页查询 <功能详细描述>
     * 
     * @param sql
     * @param pageable
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    Page<T> findPageBySql(String sql, Pageable pageable, Object... args);
    
    /**
     * <一句话功能简述>HSQL分页查询 <功能详细描述>
     * 
     * @param sql
     * @param pageable
     * @param args
     * @return
     * @see [类、类#方法、类#成员]
     */
    Page<T> findPageByNativeSql(String sql, Class<?> c, Pageable pageable, Object... args);
}
